rabbitmq 集群搭建

前言

一般服务搭建有三种模式:单机模式,伪集群模式,集群模式。由于只有单台服务器,这里采用伪集群模式进行服务的搭建(即在单台服务器下模拟集群的方式)。但是当运用到生产环境后,考虑到服务的高性能,高可用等,肯定是使用真正的集群模式搭建的,搭建方式上伪集群模式和集群模式相差无几,可以作为集群模式搭建参考。

集群搭建

  1. 节点说明

    rabbitmq伪集群由两个rabbitmq节点组成:
    1. rabbitmq-node1(master) - 10.116.84.117:5673:15673 - disc磁盘节点
    2. rabbitmq-node2(slaver) - 10.116.84.117:5674:15674 - ram内存节点
    其中
    5673和5674分别为rabbitmq-node1和rabbitmq-node2的client连接端口;
    15673和15674分别为rabbitmq-node1和rabbitmq-node2后台监控系统访问端口;
    rabbitmq-node1为master且是disc磁盘节点;
    rabbitmq-node2为slaver且是ram内存节点;
  2. 搭建过程

    1. 下载安装openssl
    cd /usr/local
    wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1c.tar.gz

    tar –zxvf openssl-1.0.1c.tar.gz
    cd openssl-1.0.1c
    ./config
    make
    make install

    2. 下载安装Python
    cd /usr/local
    wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz

    xz -d Python-3.4.3.tar.xz
    tar -xvf Python-3.4.3.tar
    cd Python-3.4.3
    ./configure
    make
    make install

    3. yum安装ncurses
    yum clean all //先清除缓存记录
    yum install ncurses-devel
    ps: 这一步是为下面第4步做准备的,不然第4步./configure会编译不过。

    4. 下载安装Erlang语言环境
    cd /usr/local
    wget http://erlang.org/download/otp_src_18.2.1.tar.gz

    tar -zxvf otp_src_18.2.1.tar.gz
    cd otp_src_18.2.1
    ./configure //编译出错时,可通过make clean命令清除编译结果
    make
    make install

    5. 下载安装simplejson
    cd /usr/local
    wget https://pypi.python.org/packages/40/ad/52c1f3a562df3b210e8f165e1aa243a178c454ead65476a39fa3ce1847b6/simplejson-3.10.0.tar.gz

    tar -zxvf simplejson-3.10.0.tar.gz
    cd simplejson-3.10.0
    sudo python setup.py install

    ************************ok,到此为止rabbitmq运行环境已经安装完毕*********************

    6. 安装rabbitmq各节点
    cd /usr/local
    mkdir rabbitmq-cluster
    cd rabbitmq-cluster
    wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.0/rabbitmq-server-generic-unix-3.6.0.tar.xz

    xz -d rabbitmq-server-generic-unix-3.6.0.tar.xz
    tar -xvf rabbitmq-server-generic-unix-3.6.0.tar

    mv rabbitmq_server-3.6.0/ rabbitmq-node1
    cp -r rabbitmq-node1/ rabbitmq-node2
    ps:对于高版本的rabbitmq-server,只需要解压即可运行!

    7. 修改rabbitmq-node1节点配置
    cd /usr/local/rabbitmq-cluster/rabbitmq-node1/etc/rabbitmq
    touch rabbitmq-env.conf //环境变量文件(默认没有,自己手动创建)

    vim rabbitmq-env.conf
    //加入如下配置:
    NODE_PORT=5673
    NODENAME=rabbitmq-node1

    touch rabbitmq.config //配置文件(默认没有,自己手动创建)
    vim rabbitmq.config
    //加入如下配置:
    [ {rabbitmq_management, [{listener, [{port, 15673}]}]} ].

    8. 修改rabbitmq-node2节点配置
    cd /usr/local/rabbitmq-cluster/rabbitmq-node2/etc/rabbitmq
    touch rabbitmq-env.conf //环境变量文件(默认没有,自己手动创建)

    vim rabbitmq-env.conf
    //加入如下配置:
    NODE_PORT=5674
    NODENAME=rabbitmq-node2

    touch rabbitmq.config //配置文件(默认没有,自己手动创建)
    vim rabbitmq.config
    //加入如下配置:
    [ {rabbitmq_management, [{listener, [{port, 15674}]}]} ].

    9. 修改各节点主机hosts文件
    由于这里是伪集群,只用修改一台hosts文件即可!
    vim /etc/hosts
    //加入如下配置:
    10.116.84.117 rabbitmq-node1@iZ94degopx4Z
    10.116.84.117 rabbitmq-node2@iZ94degopx4Z

    其中,iZ94degopx4Z为当前主机的hostname,可通过输入hostname即可查看!

    10. 启动rabbitmq-node1(master)节点
    cd /usr/local/rabbitmq-cluster/rabbitmq-node1/sbin/
    ./rabbitmq-server
    或以后台进程启动,即使退出xshell客户端,服务不会退出
    ./rabbitmq-server -detached
    服务启动成功后,会在$HOME/下面生成.erlang.cookie文件并写入cookie值。

    11. 设置各节点.erlang.cookie
    由于rabbitmq集群是依赖于Erlang集群环境的,Erlang集群各机器之间要能够通信必须要有相同的erlang cookie信息。
    默认.erlang.cookie文件的位置在$HOME/.erlang.cookie(是一个隐藏的文件)
    以root账号启动则在/root目录下: cat /root/.erlang.cookie
    因为是单机伪集群,我们不用关心此设置,但是在搭建集群时,是需要将master节点服务启动成功后,生成的.erlang.cookie文件拷贝到其他节点中的。

    12. 启动rabbitmq-node2(slaver)节点并加入到集群中
    将rabbitmq-node2以ram内存节点加入到集群,不指定则默认以disc磁盘节点加入到集群中
    cd /usr/local/rabbitmq-cluster/rabbitmq-node2/sbin/
    //如果之前有加入集群过,可通过如下命令,重置集群状态信息
    ./rabbitmqctl stop_app
    ./rabbitmqctl reset
    //将当前节点以ram内存节点的形式加入群组
    ./rabbitmqctl join_cluster –-ram rabbitmq-node1@iZ94degopx4Z
    ./rabbitmqctl start_app

    13. 启动各节点监控
    /usr/local/rabbitmq-cluster/rabbitmq-node1/sbin/rabbitmq-plugins enable rabbitmq_management
    /usr/local/rabbitmq-cluster/rabbitmq-node2/sbin/rabbitmq-plugins enable rabbitmq_management
    ps:这样就可以通过浏览器访问15673和15674端口查看集群监控信息了。
  3. 查看集群运行状态

    cd /usr/local/rabbitmq-cluster/rabbitmq-node1/sbin/
    ./rabbitmqctl cluster_status

image

集群高可用

参考之前写的一篇博文《haproxy安装部署

参考链接

  1. https://www.rabbitmq.com/clustering.html
  2. http://chyufly.github.io/blog/2016/04/10/rabbitmq-cluster/